#include <stdio.h>
#include <stdlib.h>
#define TRUE 0
#define FALSE -1
//方便好用的自定义数组(后来发现自己是个憨批但是懒得改了，正好这样也好理解)
typedef struct MyArray{
    int *array;//存储所有被遍历的数字
    int n;//记录存储数组中总共的数字量
} MyArray;
int nosame(int* a,int row ,int column);
int equal(MyArray MyArray);



int main()
{
	int a[5][6]={
		{0},
		{0,1,2,3,4,5},
		{0,11,12,13,14,15},
		{0,21,22,23,24,25},
		{0,31,32,33,34,35}
	};

	printf("%d\n", nosame((int *)a, 4,5));
	return 0;
}

//文化沙漠们：row是行，column是列
//由于main函数在入参时,强制将二维数组转化成了int * 类型，所以无法直接通过二维数组的形式进行遍历
int nosame(int* a,int row ,int column){
    int i,j;//i,j计数器
    MyArray myArray;
    myArray.n=0;
    myArray.array = (int *)malloc(sizeof(int)*row*column);
    for(i=1;i<row+1;i++){
        for(j=1;j<column+1;j++){
            myArray.array[myArray.n]=a[i*(column+1)+j];//每行column+1个数字，则在i行j列的数字为i*(column+1)+j **理解难点
            myArray.n++;
        }
    }  
    if(equal(myArray)) return FALSE;  
    return TRUE;

}
//传入存储数组,数据量和遍历对象，判断是否相等
int equal(MyArray myArray){
    int i,j;//迭代器
    for(i=0;i<myArray.n;i++){
        for(j=i+1;j<myArray.n;j++){
            if(myArray.array[i]==myArray.array[j]) return 1;
        }
    }
    return 0;
}

/*
设计一个函数nosame,函数格式如下：
int nosame(int *a, int m, int n)
a是一个指向二维数组首元素的指针，所指向的数组m+1行，n+1列，其中第0行和第0列的数据无效，也就是只需要判断1--m行和1--n列的数据就可以，
如果这个数组的所有整数各不相同，则返回0，否则返回-1
如下的main函数执行后
int main(int argc, _TCHAR* argv[])
{
	int a[5][6]={
		{0},
		{0,1,2,3,4,5},
		{0,11,12,13,14,15},
		{0,21,22,23,24,25},
		{0,31,32,33,34,35}
	};

	printf("%d\n", nosame((int *)a, 4,5));
	return 0;
}
执行的结果为
0
*/